package com.itany.corejava.code15_stream;

import com.sun.scenario.effect.impl.sw.sse.SSEBlend_SRC_OUTPeer;

import java.util.*;
import java.util.function.Consumer;
import java.util.function.UnaryOperator;
import java.util.stream.IntStream;
import java.util.stream.Stream;

/**
 * @author MissChen
 * @date 2024年03月25日 16:38
 */
public class Test01_创建stram对象 {
    public static void main(String[] args) {
        //方式一:Collection体系的集合
        List<Integer> list = Arrays.asList(1, 3, 6, 8, 13, 15);
        Stream<Integer> stream = list.stream();
        // stream.forEach(new Consumer<Integer>() {
        //     @Override
        //     public void accept(Integer integer) {
        //         System.out.println(integer);
        //     }
        // });

        // stream.forEach(integer -> System.out.println(integer));
        stream.forEach(System.out::println);
        stream.close();
        System.out.println("---");
        //方式二:Map体系集合
        Map<Integer, String> map = new HashMap<>();
        map.put(1, "admin");
        map.put(2, "coco");
        map.put(3, "tom");

        //将Map中所有的key存放到Set集合中进行转换
        Stream<Integer> keyStream = map.keySet().stream();
        // keyStream.forEach(integer -> System.out.println(integer));
        keyStream.forEach(System.out::println);


        //将Map的key-value使用Entry的方式放到Set集合中进行转换
        Stream<Map.Entry<Integer, String>> entryStream = map.entrySet().stream();
        // entryStream.forEach(new Consumer<Map.Entry<Integer, String>>() {
        //     @Override
        //     public void accept(Map.Entry<Integer, String> integerStringEntry) {
        //         System.out.println(integerStringEntry);
        //     }
        // });
        entryStream.forEach(System.out::println);
        System.out.println("=========");
        //方式三:数组类型
        Integer[] arr = {1, 2, 3, 4, 5};
        Stream<Integer> s1 = Arrays.stream(arr);
        s1.forEach(System.out::println);

        //通过Stream提供的静态方法of
        String[] arr2 = {"南京", "无锡", "苏州", "常州", "泰州"};
        Stream<String> s2 = Stream.of(arr2);
        s2.forEach(System.out::println);

        // 方式四:可变长类型
        Stream<String> s3 = Stream.of("李白", "杜甫", "王维", "苏东坡");
        s3.forEach(System.out::println);

        //方式五:无限流，将无限个元素添加到Stram中,永不停止
        // UnaryOperator<Integer> operator = UnaryOperator.identity();
        // 第一个参数：初始元素
        // 第二个参数：直接使用UnaryOperator对象，表示每次都是同一个值
        // Stream<Integer> s4 = Stream.iterate(1, operator);
        // s4.forEach(System.out::println);

        UnaryOperator<Integer> o=new UnaryOperator<Integer>() {
            @Override
            public Integer apply(Integer integer) {
                return integer+1;
            }
        };

        Stream<Integer> s4 = Stream.iterate(1,i -> i+1 );
        s4.forEach(System.out::println);
    }
}
